From 2c5e70071affcb71a7c0dcc398a78651bd43a9e1 Mon Sep 17 00:00:00 2001 From: "mjw@wray-m-3.hpl.hp.com" Date: Wed, 6 Oct 2004 13:32:17 +0000 Subject: [PATCH] bitkeeper revision 1.1159.102.1 (4163f3e1F0LimXbocHs-QcPviz39JA) Improve error messages by unwrapping Failures. --- tools/python/xen/xend/XendDomainInfo.py | 14 ++++++++++++++ tools/python/xen/xend/server/SrvDomainDir.py | 5 +++++ 2 files changed, 19 insertions(+) diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index 8a8af83c10..470ae7250e 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -347,6 +347,18 @@ def append_deferred(dlist, v): if isinstance(v, defer.Deferred): dlist.append(v) +def dlist_err(val): + """Error callback suitable for a deferred list. + In a deferred list the error callback is called with with Failure((error, index)). + This callback extracts the error and returns it. + + @param val: Failure containing (error, index) + @type val: twisted.internet.failure.Failure + """ + + (error, index) = val.value + return error + class XendDomainInfo: """Virtual machine object.""" @@ -819,6 +831,7 @@ class XendDomainInfo: append_deferred(dlist, v) index[dev_name] = dev_index + 1 deferred = defer.DeferredList(dlist, fireOnOneErrback=1) + deferred.addErrback(dlist_err) return deferred def device_create(self, dev_config): @@ -1050,6 +1063,7 @@ class XendDomainInfo: log.warning("Unknown config field %s", field_name) index[field_name] = field_index + 1 d = defer.DeferredList(dlist, fireOnOneErrback=1) + deferred.addErrback(dlist_err) return d diff --git a/tools/python/xen/xend/server/SrvDomainDir.py b/tools/python/xen/xend/server/SrvDomainDir.py index 6307b25089..4526b996f9 100644 --- a/tools/python/xen/xend/server/SrvDomainDir.py +++ b/tools/python/xen/xend/server/SrvDomainDir.py @@ -5,6 +5,7 @@ from StringIO import StringIO from twisted.protocols import http from twisted.web import error +from twisted.python.failure import Failure from xen.xend import sxp from xen.xend import XendDomain @@ -94,6 +95,8 @@ class SrvDomainDir(SrvDir): def _op_create_err(self, err, req): """Callback to handle errors in deferred domain creation. """ + if isinstance(err, Failure): + err = err.getErrorMessage() print 'op_create> Deferred Exception creating domain:', err req.setResponseCode(http.BAD_REQUEST, "Error creating domain: " + str(err)) return str(err) @@ -127,6 +130,8 @@ class SrvDomainDir(SrvDir): return val def _op_restore_err(self, err, req): + if isinstance(err, Failure): + err = err.getErrorMessage() print 'op_create> Deferred Exception restoring domain:', err req.setResponseCode(http.BAD_REQUEST, "Error restoring domain: "+ str(err)) return str(err) -- 2.30.2